package com.atguigu.jxc.service;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;

import java.util.Map;

/**
 * @author 杨林
 * @create 2023-01-28 10:18 星期六
 * description:
 */
public interface GoodsService {

    /**
     * 根据商品类别  商品编码  商品名称 查询商品的库存   （分页查询）
     * @param page
     * @param rows
     * @param codeOrName
     * @param goodsTypeId
     * @return
     */
    Map<String, Object> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId);


    /**
     *
     * @param page
     * @param rows
     * @param goodsName
     * @param goodsTypeId
     * @return
     */
    Map<String, Object> list(Integer page, Integer rows, String goodsName, Integer goodsTypeId);

    /**
     * 商品添加或修改
     * @param goods
     * @return
     */
    ServiceVO saveOrUpdate(Goods goods);

    /**
     * 获取商品编码
     * @return
     */
    ServiceVO getCode();

    /**
     * 根据id删除商品 (要判断商品状态,入库、有进货和销售单据的不能删除)
     * @param goodsId
     * @return
     */
    ServiceVO delete(Integer goodsId);

    /**
     * 展示无库存商品列表
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    Map<String, Object> getNoInventoryQuantity(Integer page, Integer rows, String nameOrCode);

    /**
     * 有库存商品列表展示（可以根据商品名称或编码查询）
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    Map<String, Object> getHasInventoryQuantity(Integer page, Integer rows, String nameOrCode);

    /**
     * 添加库存、修改数量或成本价 (根据goodsId)
     * @param goodsId
     * @param inventoryQuantity
     * @param purchasingPrice
     * @return
     */
    ServiceVO saveStock(Integer goodsId, Integer inventoryQuantity, double purchasingPrice);

    /**
     * 删除库存（要判断商品状态 入库、有进货和销售单据的不能删除）
     * @param goodsId
     * @return
     */
    ServiceVO deleteStock(Integer goodsId);

    /**
     * 查询所有 当前库存量 小于 库存下限的商品信息
     * @return
     */
    Map<String, Object> listAlarm();

    /**
     *
     * @param goodsCode
     * @param num
     * @return  是否修改成功
     */
    boolean changeInventoryQuantity(String goodsCode,Integer num);
}
